package com.qyi.activemq.queue;

import com.qyi.activemq.queue.producer.MqProducerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author luqi
 * @Date 2021/3/11 10:11
 * @Description 点对点模式
 * <p>
 * 基于点对点的消息模型
 * 消息生产者生产消息发送到 queue 中，然后消息消费者从 queue 中取出并且消费消息。 消息被消费以后，queue 中不再有存储，所以消息消费者不可能消费到已经被消费的消
 * 息。
 * Queue 支持存在多个消费者，但是对一个消息而言，只会有一个消费者可以消费、其它 的则不能消费此消息了。 当消费者不存在时，消息会一直保存，直到有消费消费
 */
@RestController
@RequestMapping("/activemq")
@Slf4j
public class MqController {

    @Autowired
    @Qualifier("mqProducerService")
    MqProducerService producer;


    @PostMapping("/queue/normal")
    public String sendQueue(@RequestBody Map<String, String> request) {
        producer.sendQueueNormal(request.get("msg"));
        return "ok";
    }

    @PostMapping("/queue/auto")
    public String sendQueueAuto(@RequestBody Map<String, String> request) {
        producer.sendQueueAuto(request.get("msg"));
        return "ok";
    }


    @PostMapping("/queue/manual")
    public String sendQueueManual(@RequestBody Map<String, String> request) {
        producer.sendQueueManual(request.get("msg"));
        return "ok";
    }

    @PostMapping("/queue/ack")
    public String sendQueueAck(@RequestBody Map<String, String> request) {
        producer.sendQueueAck(request.get("msg"));
        return "ok";
    }


}
